package com.tjf.myjetpackdemo.RxObserverModel;

/**
 * @author: tjf
 * @date: 2023-06-07
 * @desc：具体被观察者
 */
public abstract class Observable<T> implements ObservableSource<T> {
    @Override
    public void subscribe(Observer observer) {
        //把这个订阅的功能让Observable 的子类完成
        subscribeActual(observer);
    }

    protected abstract void subscribeActual(Observer<T> observer);


    // 创建被观察者的实例
    public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {
        ObservableCreate observableCreate = new ObservableCreate(source);
        return observableCreate;
    }

    // 创建被观察者
    public <U> Observable<U> map(Function<T, U> function) {
        return new ObservableMap(this, function);
    }

    //  被观察者线程
    public Observable<T> subscribeOn() {
        return new ObservableSubscribeOn<>(this);
    }

    //  观察者线程
    public Observable<T> observerOn() {
        return new ObservableObserveOn<>(this);
    }
}
